<?php
abstract class Action {
	/**
	 * 应用程序信息
	 * @var AppMeta
	 */
	protected $meta;
	protected $app;
	public function __construct($app) {
		$this->app = $app;
		$this->meta = get_appmeta ( $app );
	}
	/**
	 * 返回应用信息
	 * 
	 * @return AppMeta 返回应用信息
	 */
	public function getMeta() {
		return $this->meta;
	}
	/**
	 * 在执行命令前执行
	 * @param IRequest $request
	 * @param Response $response
	 * @param Ioc	   $ioc
	 * @return boolean 
	 */
	public function preExec($request, $response, $ioc) {
		return true;
	}
	/**
	 * 执行命令
	 * @param IRequest $request
	 * @param Response $response
	 * @param Ioc	   $ioc
	 * @return boolean 返回响应
	 */
	public abstract function exec($request, $response, $ioc);
	/**
	 * 当前的请求是否被缓存,如果被缓存则返回缓存KEY,反之返回false
	 * @param IRequest $request	 
	 * @param Ioc	   $ioc
	 * @return mixed 缓存返回缓存KEY,反之返回false
	 */
	public function cacheKey($request, $ioc) {
		return false;
	}
}